QuickTime may open your packet reassembler to check its version or to get information. It may then close your reassembler without ever initializing it or using it to process packets.
Your reassembler component must be able to perform the standard component functions, such as _Version , and its specific RTPRssmGetInfo function, without being initialized.
When opened, your packet reassembler must open a base reassembler component. Your reassembler should delegate any functions it does not implement. It should also support the _Target call.
A typical reassembler's _Open and _Target functions might look like this:
pascal ComponentResult RTPOvalRssm_Open(RTPOvalRssmGlobalsPtr globals,
ComponentInstance self)
{
#pragma unused (inGlobals)
ComponentResult err;
globals = (RTPOvalRssmGlobalsPtr)NewPtrClear(sizeof(RTPOvalRssmGlobalsRecord));
if ( (err = MemError()) != noErr )
goto exit;
SetComponentInstanceStorage(self, (Handle)globals);
globals->self = self;
err = OpenADefaultComponent(kRTPReassemblerType, kRTPBaseReassemblerType,
&globals->delegateComponent);
if ( err == noErr )
err = RTPOval_Target(globals, self);
exit:
return err;
}
pascal ComponentResult RTPOval _Target(RTPOvalRssmGlobalsPtr inGlobals,
ComponentInstance inParentComponent)
{
inGlobals->parent = inParentComponent;
return ComponentSetTarget(inGlobals->delegateComponent, inParentComponent);
}
| Previous | Chapter Contents | Chapter Top | Next |